package com.sudo.service.admin.service.impl;

import com.sudo.common.utils.JsonUtil;
import com.sudo.dao.admin.entity.SysCpuLog;
import com.sudo.dao.admin.mapper.SysCpuLogMapper;
import com.sudo.service.admin.service.AdminBaseService;
import com.sudo.service.admin.service.SysCpuLogService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * @author 为道日损 2020-07-03 14:47
 * webSite：https://www.sudo.ren
 */
@Service
public class SysCpuLogServiceImpl extends AdminBaseService implements SysCpuLogService {

    @Resource
    private SysCpuLogMapper sysCpuLogMapper;


    /**
     * 将所有cpu信息存入redis
     * @param sysCpuLog cpu实体
     */
    @Override
    public void insertCpuLogToRedis(String server, SysCpuLog sysCpuLog) {
        String data = JsonUtil.objectToJson(sysCpuLog);
        //redisOperator.lpush(getCpuLogRedisKey(sysCpuLog.getServer()),data);
        setSysCpuMemInfoByRealTime(redisKeys.getCpuLogRedisRealTimeKey(server),data);
    }

    /**
     * 将redis中的cpu信息落地到mysql
     */
    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
    @Override
    public void insertCpuLogFromRedisToMysql(String serverNode) {
        String jsonData = stringRedisUtil.lRightPop(redisKeys.getCpuLogRedisKey(serverNode));
        if (StringUtils.isNotBlank(jsonData)) {
            SysCpuLog sysCpuLog = JsonUtil.jsonToPojo(jsonData, SysCpuLog.class);
            sysCpuLogMapper.insert(sysCpuLog);
        }
    }

    /**
     * 获取cpu的实时信息
     * @return list数组
     */
    @Override
    public List<SysCpuLog> getCpuLogListFromRedis(String serverNode) {
        List<SysCpuLog> sysCpuLogList = new ArrayList<>();
        List<String> cpuLogArr = stringRedisUtil.lRange(redisKeys.getCpuLogRedisRealTimeKey(serverNode), 0, 0);
        for (String s : cpuLogArr) {
            SysCpuLog sysCpuLog = JsonUtil.jsonToPojo(s, SysCpuLog.class);
            sysCpuLogList.add(sysCpuLog);
        }
        Collections.reverse(sysCpuLogList);
        return sysCpuLogList;
    }


}
